import type { ICurrentUser } from '@nbase/shared';

/**
 * JWT Payload (符合 JWT 标准 RFC 7519)
 * 
 * 标准字段：
 * - sub (subject): 用户唯一标识
 * - iat (issued at): 签发时间（由 @nestjs/jwt 自动添加）
 * - exp (expiration): 过期时间（由 @nestjs/jwt 自动添加）
 * 
 * 自定义字段：
 * - username: 用户名
 * - roles: 角色列表
 * - permissions: 权限列表
 */
export interface JwtPayload {
  sub: string;           // 用户 ID (JWT 标准字段名)
  username: string;      // 用户名
  roles?: string[];      // 角色列表
  permissions?: string[]; // 权限列表
}

/**
 * 从 JwtPayload 转换为 ICurrentUser
 * 将 JWT 标准字段映射到业务字段
 */
export function jwtPayloadToCurrentUser(payload: JwtPayload): ICurrentUser {
  return {
    userId: payload.sub,
    username: payload.username,
    roles: payload.roles || [],
    permissions: payload.permissions || [],
  };
}

/**
 * 从 ICurrentUser 转换为 JwtPayload
 * 将业务字段映射到 JWT 标准字段
 */
export function currentUserToJwtPayload(user: Pick<ICurrentUser, 'userId' | 'username' | 'roles' | 'permissions'>): JwtPayload {
  return {
    sub: user.userId,
    username: user.username,
    roles: user.roles,
    permissions: user.permissions,
  };
}

